home *** CD-ROM | disk | FTP | other *** search
/ System Booster / System Booster.iso / Archives / ForCLI / 0Utils13.lha / 0Utils / GetWord.c < prev    next >
C/C++ Source or Header  |  1995-03-20  |  3KB  |  143 lines

  1.  
  2. /******************************************************************************
  3.  
  4.     MODULE
  5.     GetWord.c
  6.  
  7.     DESCRIPTION
  8.     Get a number and some strings on Commandline
  9.     and write one of them to StdOut
  10.  
  11.     NOTES
  12.     Kickstart 2.0+ required
  13.     compiles w/ SAS/C v6.51
  14.  
  15.     BUGS
  16.     none known
  17.  
  18.     TODO
  19.  
  20.     EXAMPLES
  21.     > getword 1 x y z
  22.     y
  23.  
  24.     SEE ALSO
  25.  
  26.     INDEX
  27.  
  28.     HISTORY
  29.     01-08-93 b_noll created
  30.     23-08-93 b_noll completed
  31.     11-02-95 b_noll slight changes
  32.     20-02-95 b_noll restructured source
  33.     21-02-95 b_noll added version/format-prefix/offset
  34.     20-03-95 b_noll added args diagnostics
  35.  
  36.     AUTHOR
  37.     Bernd Noll, Brunnenstrasse 55, D-67661 Kaiserslautern
  38.     b_noll@informatik.uni-kl.de
  39.  
  40. ******************************************************************************/
  41.  
  42. /**************************************
  43.         Includes
  44. **************************************/
  45.  
  46. #ifndef   EXEC_LIBRARIES_H
  47. # include <exec/libraries.h>
  48. #endif /* EXEC_LIBRARIES_H */
  49.  
  50. #ifndef   CLIB_EXEC_PROTOS_H
  51. # include <clib/exec_protos.h>
  52. #endif /* CLIB_EXEC_PROTOS_H */
  53.  
  54. #ifndef   DOS_DOS_H
  55. # include <dos/dos.h>
  56. #endif /* DOS_DOS_H */
  57.  
  58. #ifndef   CLIB_DOS_PROTOS_H
  59. # include <clib/dos_protos.h>
  60. #endif /* CLIB_DOS_PROTOS_H */
  61.  
  62. #include <proto/dos.h>
  63. #include <proto/exec.h>
  64.  
  65. /**************************************
  66.      Defines & Structures
  67. **************************************/
  68.  
  69. #ifndef ABSEXECBASE
  70. #define ABSEXECBASE ((struct ExecBase **)4L)
  71. #endif
  72.  
  73. struct _arg {
  74. /* ******************** USER FORMAT ******************** */
  75. #define FORMAT "NUMBER/N/A,WORDS/M"
  76.  
  77.     LONG  * num;
  78.     STRPTR* words;
  79.  
  80. /* ******************** USER FORMAT ******************** */
  81. }; /* struct _argv */
  82.  
  83. #define MAXPATHLEN 256
  84. #define MAXLINELEN 256
  85.  
  86. #define VERSIONPREFIX    "\0$VER: "
  87. #define VERSIONOFFSET    0
  88. #define FORMATPREFIX    "\0$ARG: "
  89. #define FORMATOFFSET    7
  90.  
  91. /**************************************
  92.         Implementation
  93. **************************************/
  94.  
  95. long _main (void)
  96. {
  97.     const char      * version = VERSIONPREFIX "GetWord 1.3 " __AMIGADATE__ + VERSIONOFFSET;
  98.     long        retval  = RETURN_FAIL;
  99.     struct ExecBase*SysBase = *ABSEXECBASE;
  100.     struct Library* DOSBase;
  101.  
  102.     if (DOSBase = OpenLibrary (DOSNAME, 37)) {
  103.     struct _arg    argv    = { 0 };
  104.     APTR args;
  105.     retval     = RETURN_ERROR;
  106.     if (args = (void*)ReadArgs(FORMATPREFIX FORMAT + FORMATOFFSET, (LONG*)&argv, NULL)) {
  107. /* ******************** USER BODY ******************** */
  108.  
  109.         long num, cnt;
  110.  
  111.         for (cnt = 0; argv.words[cnt]; ++cnt);
  112.  
  113.         num  = *(argv.num);
  114.         if (num < 0) num += cnt+1;
  115.  
  116.         //retval = RETURN_WARN; /* if no error is wanted ... */
  117.  
  118.         if (num == 0 || num > cnt) {
  119.         SetIoErr (ERROR_BAD_NUMBER);
  120.         } else {
  121.         retval = RETURN_WARN;
  122.         if (PutStr (argv.words[num-1]) == 0) retval = RETURN_OK;
  123.         PutStr("\n");
  124.         } /* if */
  125.  
  126.  
  127. /* ******************** USER BODY ******************** */
  128.         FreeArgs (args);
  129.     } /* if */
  130.  
  131.     if (retval > RETURN_WARN)
  132.         PrintFault(IoErr(), "GetWord");
  133.  
  134.     CloseLibrary (DOSBase);
  135.     } /* if */
  136.     return (retval);
  137. } /* _main */
  138.  
  139. /******************************************************************************
  140. *****  END GetWord.c
  141. ******************************************************************************/
  142.  
  143.